package org.example.myleet.p832;

public class Solution {
    /**
     * 0 ms
     * 先左右交换后0-1翻转，但是从结果来看其实可以非常简单
     * 使用双指针进行行交换翻转
     */
    public int[][] flipAndInvertImage(int[][] A) {
        int n = A.length;
        for (int i=0; i<n; i++) {
            int l = 0, r = A[i].length-1;
            while (l < r) {
                if (A[i][l] == A[i][r]) {
                    //这里比较巧妙，如果两边是相同的时候，左右翻转之后其实没有变化，但是要进行0-1翻转
                    A[i][l] ^= 1;
                    A[i][r] ^= 1;
                }
                //如果两边是不相同的时候，左右翻转并0-1翻转之后其实没有变化
                //然后双指针向中间靠拢
                ++l;
                --r;
            }
            if (l == r) {
                //如果是奇数列的时候要考虑最中间的数的0-1翻转
                A[i][l] ^= 1;
            }
        }
        return A;
    }
}
